package com.powergame.console;

import com.powergame.exceptions.PowerGameException;
import com.powergame.main.PowerGame2DMain;
import com.powergame.model.Joueur;
import com.powergame.model.Ordre;
import com.powergame.model.OrdreDeplacement;
import com.powergame.model.Secteur;
import com.powergame.model.TypePiece;
import de.lessvoid.nifty.controls.ConsoleCommands.ConsoleCommand;

/**
 * NouvelOrdreCommand.java
 *
 * Modélise la commande qui ajoute un nouvel ordre au joueur courant
 *
 * @author ToF
 */
public class NouvelOrdreCommand implements ConsoleCommand {

    private PowerGame2DMain application = null;
    
    public NouvelOrdreCommand(PowerGame2DMain application){
        this.application = application;
    }
    
    public void execute(String[] args) {
        
        Joueur joueur = application.getJeu().getJoueurCourant();
        if(joueur == null){
            application.output("ERREUR: Pas de joueur");
            
        }else{
            
            Ordre ordre = null;
        
            if(args.length < 2){
                application.output("ERREUR: nvordre <move|change> <piece> [<start> <end>]");

            }else{
                if(args[1].equalsIgnoreCase("move")){
                    
                    if(args.length < 5){
                        application.output("ERREUR: nvordre move <type_piece> <secteur_depart> <secteur_destination>");
                        
                    }else{
                        TypePiece typePiece = TypePiece.parseTypePiece(args[2]);
                        Secteur secteurDepart = application.getJeu().getPlateau().getSecteur(args[3]);
                        if(args[3].equalsIgnoreCase("res")){
                            secteurDepart = joueur.getReserve();
                        }
                        
                        Secteur secteurDestination = application.getJeu().getPlateau().getSecteur(args[4]);

                        if(secteurDepart == null){
                            application.output("ERREUR: Secteur '" + args[3] + "' inconnu !");

                        }else if(secteurDestination == null){
                            application.output("ERREUR: Secteur '" + args[4] + "' inconnu !");

                        }else{
                            ordre = new OrdreDeplacement(joueur.getOrdres(), typePiece, secteurDepart, secteurDestination);
                        }
                    }

                }else if(args[1].equalsIgnoreCase("change")){

                }else{
                    application.output("ERREUR: Ordre inconnu !");
                }
                
                try{
                    application.ajouteOrdre(joueur, ordre);

                }catch(PowerGameException e){
                    application.output("ERREUR: " + e.getMessage());
                }
            }
        }
    }
}
